package com.xuelang.pipeline.artifact.domain.resource.service;

import com.xuelang.pipeline.artifact.client.common.result.PageRecord;
import com.xuelang.pipeline.artifact.client.resource.dto.RepositoryComponentQuery;
import com.xuelang.pipeline.artifact.domain.resource.RepositoryComponent;

import java.util.List;

/**
 * 仓库制品组件领域服务类
 *
 * @author xiwen.zxg
 * @since 2024/5/15
 */
public interface RepositoryComponentDomainService {
    /**
     * 获取仓库制品组件列表，有过滤条件
     *
     * @param currentPage
     * @param pageSize
     * @param repositoryComponentQuery
     * @return
     */
    PageRecord<RepositoryComponent> pageList(long currentPage, long pageSize, RepositoryComponentQuery repositoryComponentQuery);
    /**
     * 获取仓库制品组件列表，有过滤条件
     *
     * @param repositoryComponentQuery
     * @return
     */
    List<RepositoryComponent> list(RepositoryComponentQuery repositoryComponentQuery);

    /**
     * 新增仓库制品组件
     *
     * @param repositoryComponent
     * @return
     */
    Boolean save(RepositoryComponent repositoryComponent);

    /**
     * 更新仓库制品组件
     *
     * @param repositoryComponent
     * @return
     */
    Boolean update(RepositoryComponent repositoryComponent);
    /**
     * 删除仓库制品组件
     *
     * @param restId
     * @return
     */
    Boolean delete(String restId);
    /**
     * 查询仓库制品组件
     *
     * @param restId
     * @return
     */
    RepositoryComponent query(String restId);

    /**
     * 查询最新版本
     *
     * @param instanceRepositoryName
     * @param name
     * @param group
     * @param format
     * @return
     */
    String queryLatestVersion(String instanceRepositoryName, String name, String group, String format);

    /**
     *  根据制品包uuid更新旧的制品组件为非最新版本
     *
     * @param packageUuid
     */
    void updateComponentsToOldVersion(String packageUuid);

    /**
     * 查询包含digest的制品组件
     *
     * @param instanceRepositoryName
     * @param packageName
     * @param currentDigest
     * @param currentPushVersion
     * @param format
     *
     * @return
     */
    RepositoryComponent queryContainsDigestAndPushVersion(String instanceRepositoryName, String packageName, String currentDigest, String currentPushVersion, String format);

    /**
     * 查询包含digest的制品组件
     *
     * @param instanceRepositoryName
     * @param packageName
     * @param format
     *
     * @return
     */
    String queryLatestVersionByPackageName(String instanceRepositoryName, String packageName, String format);

    /**
     * 通过包uuid删除制品组件
     *
     * @param packageUuid
     * @return
     */
    Boolean deleteByPackageUuid(String packageUuid);
}
